/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：ApplicationEditor.js<br>
 * 日期：2016年8月24日<br>
 * 作者: 王志远<br>
 * 功能：编辑器基类<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/

window.makeNamespace(window,"Rainier.UI.V2");

/**
 * 类型名称：Rainier.UI.V2.ApplicationViewPage<br>
 * 类型功能：编辑器基类<br>
 */
Rainier.UI.V2.ApplicationEditor = Rainier.Basic.CompositeObject.extend({
	
	NAME : "Rainier.UI.V2.ApplicationEditor",
	
	/**
	 * 函数名称：Rainier.UI.V2.ApplicationEditor.init<br>
	 * 函数功能：构造函数<br>
	 * 参数输入：objPro:ViewProperty
	 * 异常信息：无<br>
	 */
	init : function(objPro){
		this._super(objPro);
		this.commandStack 			  = null;	
		this.editorEventSupport       = new Rainier.Basic.Property.PropertyChangeSupport();	//编辑器事件侦听器
		this.editorObjectEventSupport = new Rainier.Basic.Property.PropertyChangeSupport();	//编辑器对象事件侦听器
		this.activeState = false; //激活状态
		
		var editor = this;
        if(app){
            var appContext = app.getContext();
            var listener   = appContext.getEditorObjectSelectionChangeListener();
            if(listener){
                this.installEditorObjectListener(listener);
            }
        }
		
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.ApplicationEditor.installEditorListener<br>
	 * 函数功能：安装编辑器侦听器<br>
	 * 参数输入：listener:PropertyChangeListener<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	installEditorListener : function(listener){
		this.editorEventSupport.addPropertyChangeListener(listener.getUuid(),listener);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.ApplicationEditor.uninstallEditorListener<br>
	 * 函数功能：卸载编辑器侦听器<br>
	 * 参数输入：listener:PropertyChangeListener<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	uninstallEditorListener : function(listener){
		this.editorEventSupport.removePropertyChangeListener(listener.getUuid());
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.ApplicationEditor.installEditorObjectListener<br>
	 * 函数功能：安装编辑器对象侦听器<br>
	 * 参数输入：listener:PropertyChangeListener<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	installEditorObjectListener : function(listener){
		this.editorObjectEventSupport.addPropertyChangeListener(listener.getUuid(),listener);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.ApplicationEditor.uninstallEditorObjectListener<br>
	 * 函数功能：卸载编辑器对象侦听器<br>
	 * 参数输入：listener:PropertyChangeListener<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	uninstallEditorObjectListener : function(listener){
		this.editorObjectEventSupport.removePropertyChangeListener(listener.getUuid());
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.ApplicationEditor.clearAllListeners<br>
	 * 函数功能：清除所有侦听器<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	clearAllListeners : function(){
		var _this = this;
		var editorEventlisteners 	= new draw2d.util.ArrayList();	//编辑器事件侦听器列表
		var editorObjectListeners 	= new draw2d.util.ArrayList();	//编辑器对象选择事件侦听器列表
		
		for(var sKey in this.editorEventSupport.m_aListeners) {
			editorEventlisteners.add(sKey);
		}

		for(var sKey in this.editorObjectEventSupport.m_aListeners) {
			editorObjectListeners.add(sKey);
		}
		
		editorEventlisteners.each(function(i,key){
			_this.editorEventSupport.removePropertyChangeListener(key);
		});

		editorObjectListeners.each(function(i,key){
			_this.editorObjectEventSupport.removePropertyChangeListener(key);
		});
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.ApplicationEditor.active<br>
	 * 函数功能：编辑器激活操作<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	active : function(){
		this.activeState = true;
		this.editorEventSupport.firePropertyChangeEvent(
			Rainier.UI.V2.ApplicationEditor.EVENT_APPLICTION_EDITOR_ACTIVE,
			null,
			this,
			null
		);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.ApplicationEditor.deactive<br>
	 * 函数功能：失活编辑器<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	deactive: function(){
		this.activeState = false;
		this.editorEventSupport.firePropertyChangeEvent(
			Rainier.UI.V2.ApplicationEditor.EVENT_APPLICTION_EDITOR_DEACTIVE,
			null,
			this,
			null
		);
	},
		
	/**
	 * 函数名称：Rainier.UI.V2.ApplicationEditor.isActive<br>
	 * 函数功能：是否处于激活状态<br>
	 * 函数返回：Boolean<br>
	 * 异常信息：无<br>
	 */
	isActive : function(){
		return this.activeState;
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.ApplicationEditor.getCommandStack<br>
	 * 函数功能：获取命令堆栈<br>
	 * 函数返回：draw2d.command.CommandStack<br>
	 * 异常信息：无<br>
	 */
	getCommandStack : function(){
		return this.commandStack;
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.ApplicationEditor.doSave<br>
	 * 函数功能：执行保持<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	doSave : function(){
		
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.ApplicationEditor.doSaveAs<br>
	 * 函数功能：执行另存为<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	doSaveAs : function(sName){
		
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.ApplicationEditor.doRestore<br>
	 * 函数功能：执行恢复过程<br>
	 * 参数输入：objJson Json格式对象输入<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	doRestore : function(objJson){
		
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.ApplicationEditor.close<br>
	 * 函数功能：执行编辑器关闭<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	close : function(){
		this.clearAllListeners();
		this.doSave();
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.ApplicationEditor.open<br>
	 * 函数功能：打开编辑器页<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	open : function(){
		
	}
});

Rainier.UI.V2.ApplicationEditor.EVENT_APPLICTION_EDITOR_ACTIVE 	 = "event application editor active";	//编辑器激活事件
Rainier.UI.V2.ApplicationEditor.EVENT_APPLICTION_EDITOR_DEACTIVE = "event application editor deactive";	//编辑器失活事件